<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>js/Tools.js</title>
    <link rel="stylesheet" href="http://yui.yahooapis.com/3.9.1/build/cssgrids/cssgrids-min.css">
    <link rel="stylesheet" href="../assets/vendor/prettify/prettify-min.css">
    <link rel="stylesheet" href="../assets/css/main.css" id="site_styles">
    <link rel="shortcut icon" type="image/png" href="../assets/favicon.png">
    <script src="http://yui.yahooapis.com/combo?3.9.1/build/yui/yui-min.js"></script>
</head>
<body class="yui3-skin-sam">

<div id="doc">
    <div id="hd" class="yui3-g header">
        <div class="yui3-u-3-4">
            
                <h1><img src="../assets/css/logo.png" title=""></h1>
            
        </div>
        <div class="yui3-u-1-4 version">
            <em>API Docs for: </em>
        </div>
    </div>
    <div id="bd" class="yui3-g">

        <div class="yui3-u-1-4">
            <div id="docs-sidebar" class="sidebar apidocs">
                <div id="api-list">
    <h2 class="off-left">APIs</h2>
    <div id="api-tabview" class="tabview">
        <ul class="tabs">
            <li><a href="#api-classes">Classes</a></li>
            <li><a href="#api-modules">Modules</a></li>
        </ul>

        <div id="api-tabview-filter">
            <input type="search" id="api-filter" placeholder="Type to filter APIs">
        </div>

        <div id="api-tabview-panel">
            <ul id="api-classes" class="apis classes">
            
                <li><a href="../classes/Copier.html">Copier</a></li>
            
                <li><a href="../classes/delmem.html">delmem</a></li>
            
                <li><a href="../classes/delnote.html">delnote</a></li>
            
                <li><a href="../classes/delrelnote.html">delrelnote</a></li>
            
                <li><a href="../classes/delreluser.html">delreluser</a></li>
            
                <li><a href="../classes/deluser.html">deluser</a></li>
            
                <li><a href="../classes/err.html">err</a></li>
            
                <li><a href="../classes/getmems.html">getmems</a></li>
            
                <li><a href="../classes/getnote.html">getnote</a></li>
            
                <li><a href="../classes/getnotes.html">getnotes</a></li>
            
                <li><a href="../classes/getusers.html">getusers</a></li>
            
                <li><a href="../classes/newmem.html">newmem</a></li>
            
                <li><a href="../classes/newnote.html">newnote</a></li>
            
                <li><a href="../classes/newuser.html">newuser</a></li>
            
                <li><a href="../classes/putmemnote.html">putmemnote</a></li>
            
                <li><a href="../classes/putrelnote.html">putrelnote</a></li>
            
                <li><a href="../classes/putreluser.html">putreluser</a></li>
            
                <li><a href="../classes/Tools.Copier.html">Tools.Copier</a></li>
            
                <li><a href="../classes/Tools.inject.html">Tools.inject</a></li>
            
                <li><a href="../classes/Tools.isArray.html">Tools.isArray</a></li>
            
                <li><a href="../classes/Tools.lpad.html">Tools.lpad</a></li>
            
                <li><a href="../classes/Tools.map.html">Tools.map</a></li>
            
                <li><a href="../classes/ToolsService.html">ToolsService</a></li>
            
                <li><a href="../classes/updatenote.html">updatenote</a></li>
            
            </ul>

            <ul id="api-modules" class="apis modules">
            
                <li><a href="../modules/Tools.html">Tools</a></li>
            
            </ul>
        </div>
    </div>
</div>

            </div>
        </div>
        <div class="yui3-u-3-4">
                <div id="api-options">
        Show:
        <label for="api-show-inherited">
            <input type="checkbox" id="api-show-inherited" checked>
            Inherited
        </label>

        <label for="api-show-protected">
            <input type="checkbox" id="api-show-protected">
            Protected
        </label>

        <label for="api-show-private">
            <input type="checkbox" id="api-show-private">
            Private
        </label>
        <label for="api-show-deprecated">
            <input type="checkbox" id="api-show-deprecated">
            Deprecated
        </label>

    </div>


            <div class="apidocs">
                <div id="docs-main">
                    <div class="content">
                        <h1 class="file-heading">File: js/Tools.js</h1>

<div class="file">
    <pre class="code prettyprint linenums">
/**
 * moduł z różnego rodzaju funkcjami pomocniczymi
 * @module Tools
 */
App.Tools = angular.module(&#x27;Tools&#x27;, []).
/**
 * klasa zapewniająca dostęp do potrzebnych funkcji
 * @class ToolsService
 * @extends angular.service
 */
service(&#x27;Tools.Service&#x27;, [
			&#x27;Tools.Copier&#x27;, 
			&#x27;Tools.isArray&#x27;, 
			&#x27;Tools.map&#x27;, 
			&#x27;Tools.inject&#x27;, 
			&#x27;Tools.lpad&#x27;,
function (Copier, isArray, map, inject, lpad) {
	/**
	 * kopiuje konkretne właściwości z jednego obiektu do drugiego
	 * @param  {Object} src  obiekt źródłowy
	 * @param  {Object} dest obiekt docelowy
	 * @param  {Array|String} [mode] tryb kopiowania, dostępne są:
	 * - _all_ - kopiowane są wszystkie właściwości dostępne przez pętlę &#x60;for .. in&#x60;
	 * - tablica z nazwami atrybutów do skopiowania
	 * - niepodanie argumentu, wtedy ustawiana jest opcja _all_
	 * @method copy
	 * @public
	 */
	this.copy = function (src, dest, mode) {
		var copier = new Copier();
		if(mode === undefined) {
			mode = &#x27;all&#x27;;
		}
		copier.setSource(src);
		copier.setDestination(dest);
		copier.setProperties(mode);
		copier.copy();
	};
	/**
	 * w celu dokumentacji patrz: &#x60;Tools.isArray.main&#x60;
	 * jest to ta sama funkcja
	 * @method isArray
	 * @public
	 */
	this.isArray = function () {
		return isArray;
	};
	/**
	 * w celu dokumentacji patrz: &#x60;Tools.map.main&#x60;
	 * @method map
	 * @public
	 */
	this.map = map;
	/**
	 * dokumentacja jest w &#x60;Tools.inject.main&#x60;
	 * @method inject
	 * @public
	 */
	this.inject = inject;
	/**
	 * dokumentacja jest w &#x60;Tools.lpad.main&#x60;
	 * @method lpad
	 * @public
	 */
	this.lpad = lpad;
}]).
/**
 * fabryka udostępniająca klasę &#x60;Copier&#x60;
 *
 * właśnie z tej klasy korzysta &#x60;ToolsService.copy&#x60;
 * @class Tools.Copier
 * @extends angular.factory
 */
factory(&#x27;Tools.Copier&#x27;, [&#x27;Tools.isArray&#x27;, function (isArray) {
	/**
	 * klasa kopiująca właściwości z obiektu do obiektu
	 * @class Copier
	 */
	function Copier () {
		/**
		 * uchwyt do &#x60;this&#x60; na potrzeby zagnieżdżeń zakresów
		 * @type {Copier}
		 * @property that
		 * @private
		 */
		var that = this,
		/**
		 * właściwości do skopiowania
		 * @type {mixed}
		 * @property properties
		 * @private
		 */
			properties = false,
		/**
		 * obiekt źródłowy	
		 * @type {Object}
		 * @property source
		 * @private
		 */
			source = false,
		/**
		 * obiekt docelowy
		 * @type {Object}
		 * @property destination
		 * @private
		 */
			destination = false,
		/**
		 * obiekt przechowujący referencje do funkcji kopiujących w określonych trybach
		 * @type {Object}
		 * @property propertiesTypes
		 * @private
		 */
			propertiesTypes = {
				array: copyArray,
				string: copySingle,
				all: copyAll
			};
		/**
		 * ustawia właściwości do skopiowania na podane
		 * @param  {Array|String} [props] tryb kopiowania, dostępne są:
		 * - _all_ - kopiowane są wszystkie właściwości dostępne przez pętlę &#x60;for .. in&#x60;
		 * - tablica z nazwami atrybutów do skopiowania
		 * - niepodanie argumentu, wtedy ustawiana jest opcja _all_
		 * @method setProperties
		 * @public
		 */
		function setProperties (props) {
			properties = props;
		}
		/**
		 * ustawia obiekt źródłowy na podany
		 * @param {Object} src
		 * @method setSource
		 * @public
		 */
		function setSource (src) {
			source = src;
		}
		/**
		 * ustawia obiekt docelowy na podany
		 * @param {Object} dest
		 * @method setDestination
		 * @public
		 */
		function setDestination (dest) {
			destination = dest;
		}
		/**
		 * główna funkcja uruchamiająca kopiowanie
		 * @method copy
		 * @public
		 */
		function copy () {
			var copyingFunc = propertiesTypes[checkPropertiesType()];
			return copyingFunc(properties);
		}
		/**
		 * sprawdza sposób, w jaki zostały zadane właściwości do skopiowania
		 * @return {String} nazwa sposobu
		 * @method checkPropertiesType
		 * @private
		 */
		function checkPropertiesType () {
			if(isArray(properties)) {
				return &#x27;array&#x27;;
			} else if (typeof properties === &#x27;string&#x27;) {
				if (properties === &#x27;all&#x27;) {
					return &#x27;all&#x27;;
				} else {
					return &#x27;string&#x27;;
				}
			}
		}
		/**
		 * kopiuje, gdy właściwości zadane są wprost w tablicy
		 * @param  {Array} arr
		 * @method copyAray
		 * @private
		 */
		function copyArray (arr) {
			var i,l;
			for(i=0, l=arr.length; i&lt;l; ++i) {
				copySingle(arr[i]);
			}
		}
		/**
		 * kopiuje pojedynczą właściwość o podanej nazwie
		 * @param  {String} name 
		 * @method copySingle
		 * @private
		 */
		function copySingle (name) {
			destination[name] = source[name];
		}
		/**
		 * kopiuje wszystkie właściwości dostępne przez &#x60;for .. in&#x60;
		 * @method copyAll
		 * @private
		 */
		function copyAll (props) {
			for(prop in source) {
				copySingle(prop);
			}
		}
		/**
		 * konstruktor
		 * @constructor
		 * @method construct
		 * @public
		 */
		(function construct () {
			that.setProperties = setProperties;
			that.setSource = setSource;
			that.setDestination = setDestination;
			that.copy = copy;
		})();
	}
	return Copier;
}]).
/**
 * fabryka udostępniająca funkcję &#x60;isArray&#x60;
 * @class Tools.isArray
 * @extends angular.factory
 */
factory(&#x27;Tools.isArray&#x27;, function () {
	/**
	 * funkcja sprawdza, czy obiekt jest tablicą
	 * @param  {Object}  obj obiekt do sprawdzenia
	 * @return {Boolean} 
	 * @method main
	 * @public
	 */
	function isArray (obj) {
		return (Object.prototype.toString.call(obj) === &#x27;[object Array]&#x27;);
	};
	return isArray;
}).
/**
 * fabryka udostępniająca funkcję &#x60;map&#x60;
 * @class Tools.map
 * @extends angular.factory
 */
factory(&#x27;Tools.map&#x27;, function () {
	/**
	 * funkcja aplikująca funkcję do każdego elementu tablicy
	 * @param  {Array} arr  tablica źródłowa
	 * @param  {Function} func funkcja, musi przyjmować jeden parametr będący elementem tablicy
	 * @return {Array}      nowa tablica
	 * @method main
	 * @public
	 */
	return function map (arr, func) {
		var i, l, newArr = [];
		for(i=0, l=arr.length; i&lt;l; ++i) {
			newArr[i] = func(arr[i], i);
		}
		return newArr;
	}
}).
/**
 * fabryka udostępniająca funkcję &#x60;inject&#x60;
 * @class Tools.inject
 * @extends angular.factory
 */
factory(&#x27;Tools.inject&#x27;, [&#x27;$injector&#x27;, function ($injector) {
	/**
	 * funkcja umożliwia wstrzyknięcie wybranego elementu angulara w trakcie wykonywania skryptu
	 * umożliwia pozbycie się pętli wśród zależności definiowanych jawnie
	 * @param  {String} name nazwa elementu
	 * @return {angular} element pod daną nazwą
	 * @method main
	 * @public
	 */
	function inject (name) {
		return $injector.invoke([name, function (n) {
			return n;
		}])
	}
	return inject;
}]).
/**
 * fabryka udostępniająca funkcję &#x60;lpad&#x60;
 * @class Tools.lpad
 * @extends angular.factory
 */
factory(&#x27;Tools.lpad&#x27;, [function () {
	/**
	 * metoda dodaje z lewej strony napisu wypełnienie do określonej długości dodając kolejne znaki &#x60;paddingStr&#x60;
	 * @param  {String} str        napis do wypełnienia
	 * @param  {String} paddingStr napis wypełniający
	 * @param  {Number} length     oczekiwana długość napisu
	 * @return {String}
	 * @method main
	 * @public
	 */
	function lpad (str, paddingStr, length) {
		var actualLength = (str+&#x27;&#x27;).length,
			difference = length,
			i, l,
			pad = &#x27;&#x27;;
		difference -= actualLength;
		for(i=0, l=difference; i&lt;l; ++i) {
			pad += paddingStr[i%paddingStr.length];
		}
		return pad+str;
	}
	return lpad;
}])
    </pre>
</div>

                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
<script src="../assets/vendor/prettify/prettify-min.js"></script>
<script>prettyPrint();</script>
<script src="../assets/js/yui-prettify.js"></script>
<script src="../assets/../api.js"></script>
<script src="../assets/js/api-filter.js"></script>
<script src="../assets/js/api-list.js"></script>
<script src="../assets/js/api-search.js"></script>
<script src="../assets/js/apidocs.js"></script>
</body>
</html>
